﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ext.Net;
using Ent.Inscripcion.Core.Core;
using Ent.Inscripcion.Core.Administracion;

namespace Ent.Inscripcion.Presentacion.Administracion
{
    public partial class Tutorias : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!X.IsAjaxRequest)
                {
                    //Carga de horarioTutorias de dias
                    stoDias.DataSource = DiaLista.GetLista("DIAS");
                    stoDias.DataBind();
                    //Carga de horarioTutorias de Niveles
                    stoNiveles.DataSource = CatalogoItemLista.GetListaCatalogos("NIVEL");
                    stoNiveles.DataBind();
                    //Carga de horarioTutorias de Aulas
                    stoAulas.DataSource = CatalogoItemLista.GetListaCatalogos("AULA");
                    stoAulas.DataBind();
                    //Carga de horarioTutorias de Paralelo
                    stoParalelos.DataSource = CatalogoItemLista.GetListaCatalogos("PARALELO");
                    stoParalelos.DataBind();
                    //Carga de Docentes
                    stoDocentes.DataSource = DocenteLista.GetDocenteLista(DocenteCriterio.NewDocenteCriterio());
                    stoDocentes.DataBind();
                }
            }
            catch (Exception ex)
            {
                Util.RegistarLog(ex);
            }
            
        }
        protected void btnBuscar_Click(object sender, DirectEventArgs e)
        {
            try
            {
                var criterioHorario = HorarioTutoriaCriterio.NewHorarioTutoriaCriterio();
                criterioHorario.DiaId=e.ExtraParams["Dia"];
                criterioHorario.NivelId = e.ExtraParams["Nivel"];

                CargarDatos(criterioHorario);
                e.Success = true;
            }
            catch (Exception ex)
            {
                e.Success = false;
                Util.RegistarLog(ex);
            }
        }

        /// <summary>
        /// Permite verificar si se pueden crear horarios de tutoria previa la existencia de una Oferta
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnCrearTutoria_Click(object sender, DirectEventArgs e)
        {
            try
            {
                var ofertas = OfertaTutoriaLista.GetOfertaTutoriaLista();
                var oferta = ofertas.FirstOrDefault(o => o.Estado == 1);
                e.ExtraParamsResponse["Opcion"] = oferta != null ? "1" : "0";
                e.ExtraParamsResponse["Nombre"] = oferta != null ? oferta.Nombre : "";
                e.ExtraParamsResponse["Guid"] = oferta != null ? oferta.Id.ToString() : "";
                e.Success = true;
            }
            catch (Exception ex)
            {
                e.Success = false;
                Util.RegistarLog(ex);
            }
        }

        private void CargarDatos(HorarioTutoriaCriterio criterio)
        {
            stoTutorias.DataSource = HorarioTutoriaLista.GetHorarioTutoriaLista(criterio);
            stoTutorias.DataBind();
        }
        /// <summary>
        /// Permite manejar la accion realizada sobre un HorarioTutoria
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ManejarAccion(object sender, DirectEventArgs e)
        {
            try
            {
                Guid idHorarioTutoria = Guid.Parse(e.ExtraParams["Id"]);
                var opcion = e.ExtraParams["Comando"];
                var nombre = e.ExtraParams["NombrePeriodo"];
                var horarioTutoria = HorarioTutoria.GetHorarioTutoria(idHorarioTutoria);
                txtPeriodoOferta.SetValue(nombre);
                hidIdTutoria.SetValue(horarioTutoria.OfertaTutoriaId);
                cbDia.SetValue( horarioTutoria.DiaId);
                cbNivel.SetValue(horarioTutoria.NivelId);
                cbxAula.SetValue(horarioTutoria.AulaId);
                cbxEstado.SetValue(horarioTutoria.Estado);
                cbxDocente.SetValue(horarioTutoria.DocenteId);
                cbxParalelo.SetValue(horarioTutoria.ParaleloId);
                tfHoraInicio.SetValue(horarioTutoria.HoraInicio);
                tfHoraFin.SetValue(horarioTutoria.HoraFin);
                nbfCupo.SetValue(horarioTutoria.Cupo);
                switch (opcion)
                {
                    case "Eliminar":
                        hidAccionTutoria.Text = "Eliminar";
                        btnEliminar.Show();
                        btnGuardar.Hide();
                        break;
                    case "Editar":
                        hidAccionTutoria.Text = "Editar";
                        btnEliminar.Hide();
                        btnGuardar.Show();
                        break;
                    default:
                        break;
                }
                hidIdTutoria.Text = idHorarioTutoria.ToString();
                winTutorias.Show();
                e.Success = true;
            }
            catch (Exception ex)
            {
                e.Success = false;
                Util.RegistarLog(ex);
            }
        }

        public void btnEliminar_Click(object sender, DirectEventArgs e)
        {
            try
            {
                string id = e.ExtraParams["Id"];
                Guid idHorario = Guid.Parse(id);
                var horarioTutoria = HorarioTutoria.GetHorarioTutoria(idHorario);
                horarioTutoria.Delete();
                horarioTutoria.Save();
                CargarDatos(HorarioTutoriaCriterio.NewHorarioTutoriaCriterio());
                e.Success = true;
            }
            catch (Exception ex)
            {
                e.Success = false;
                Util.RegistarLog(ex);
            }

        }
        protected void btnGuardar_Click(object sender, DirectEventArgs e)
        {
            try
            {
                string accion = e.ExtraParams["Accion"];
                string id = e.ExtraParams["Id"];
                var aula = e.ExtraParams["Aula"];
                var idOferta = e.ExtraParams["IdOferta"];
                var dia = e.ExtraParams["Dia"];
                var nivel = e.ExtraParams["Nivel"];
                var paralelo = e.ExtraParams["Paralelo"];
                var docente = e.ExtraParams["Docente"];
                var horaInicio = e.ExtraParams["HoraInicio"];
                var horaFin = e.ExtraParams["HoraFin"];
                int estado ;
                int.TryParse(e.ExtraParams["Estado"], out estado);
                int cupo;
                int.TryParse(e.ExtraParams["Cupo"], out cupo);
                DateTime hi, hf;
                DateTime.TryParse(horaInicio, out hi);
                DateTime.TryParse(horaFin, out hf);
                HorarioTutoria horarioTutoria = null;
                if (accion == "Editar")
                    horarioTutoria = HorarioTutoria.GetHorarioTutoria(new Guid(id));
                else
                    horarioTutoria = HorarioTutoria.NewHorarioTutoria();
                horarioTutoria.AulaId = aula;
                horarioTutoria.DiaId = dia;
                horarioTutoria.HoraFin = hf;
                horarioTutoria.HoraInicio = hi;
                horarioTutoria.NivelId = nivel;
                horarioTutoria.Estado = estado;
                horarioTutoria.DocenteId = docente;
                horarioTutoria.ParaleloId = paralelo;
                horarioTutoria.Cupo = cupo;
                horarioTutoria.OfertaTutoriaId = idOferta;
                horarioTutoria.Save();
                CargarDatos(HorarioTutoriaCriterio.NewHorarioTutoriaCriterio());
                e.Success = true;
            }
            catch (Exception ex)
            {
                e.Success = false;
                Util.RegistarLog(ex);
            }
        }
    }
}